package com.zhihuishu.treenity.service.course;

import java.util.List;

import com.able.openapi.overseas.dto.RecruitTreenityDto;
import com.zhihuishu.micro.course.openapi.course.dto.CourseClipsOpenDto;
import com.zhihuishu.micro.course.openapi.course.dto.CourseOpenDto;
import com.zhihuishu.remote.RemoteException;
import com.zhihuishu.remote.RemoteResult;

/**
 * 
 * @author huyue
 *
 */
public interface CourseService {

	/**
	 * 根据课程ID查询课程基本信息
	 * @param courseId
	 * @return
	 * @throws RemoteException
	 */
	public RemoteResult<CourseOpenDto> queryCourseInfo(long courseId) throws RemoteException ;
	
	
	/**
	 * 根据课程Id 来修改课程 记入日志
	 * @param course
	 * @param updateUser
	 * @throws RemoteException
	 */
	public RemoteResult<Void> updateCourseInfo(CourseOpenDto course ,long updateUser) throws RemoteException;
	
	
	/**
	 * 根据id删除课程
	 * @param courseId
	 * @param deleteUser
	 * @throws RemoteException
	 */
	void remove(long courseId,long deleteUser) throws RemoteException;
	
	/**
	 * 创建课程
	 * @param courseName
	 * @param createUser
	 * @return
	 * @throws RemoteException
	 */
	CourseOpenDto create(String courseName ,long createUser) throws RemoteException ;
	
	
	/**
	 * 修改课程
	 * @param course
	 * @param updateUser
	 * @throws RemoteException
	 */
	public RemoteResult<Void> updateCourseName(CourseOpenDto course ,long courseId) throws RemoteException;
	
	
	
	/**
	 * 添加一个片花 并修改课程中的片花id
	 * @param clipsOpen
	 * @param courseId
	 * @param updateUser
	 * @return
	 * @throws RemoteException
	 */
	public RemoteResult<Long> saveClips(CourseClipsOpenDto clipsOpen, long courseId,long updateUser) throws RemoteException;
	
	
	/**
	 * 修改一个片花
	 * @param clipsOpen
	 * @return
	 * @throws RemoteException
	 */
	public RemoteResult<Void> UpdateClipseCourese(CourseClipsOpenDto clipsOpen) throws RemoteException;
	
	
	/**
	 * 根据cc_course 中的id 来查询片花
	 * @param clipsId
	 * @return
	 * @throws RemoteException
	 */
	public RemoteResult<CourseClipsOpenDto> queryClipseOpenDto(long clipsId) throws RemoteException;

	/**
	 * 根据VideoId更新片花封面
	 * @param clipsId
	 * @return
	 * @throws RemoteException
	 */
	public RemoteResult<CourseClipsOpenDto> updatePromoVideoImg(CourseClipsOpenDto clipsOpen, long courseId,long updateUser) throws RemoteException;
	
	public RemoteResult<CourseOpenDto> loadCourse(long courseId) throws RemoteException;
	
	/**
	 * 根据课程Id 来修改课程 记入日志
	 * @param course
	 * @param updateUser
	 * @throws RemoteException
	 */
	public RemoteResult<CourseOpenDto> releaseCourse(CourseOpenDto course ,long updateUser) throws RemoteException;
	
	/**
	 * 根据登录人的id得到课程信息
	 * @param userId
	 * @return
	 */
	public List<RecruitTreenityDto> findCourseListByUserId(long userId) throws RemoteException;
	
	/**
	 * 
	 * @Description  获取当前登录人有权限进行修改的课程
	 * @author shisong
	 * @date 2017年1月10日 下午6:34:31
	 * @modifyNote 
	 * @param userId
	 * @return
	 * @throws RemoteException 
	 */
	public List<Long> findUserMaintainableCourseIds(long userId) throws RemoteException;
	
	/**
	 * 
	 * @Description 获取课程下第一条招生
	 * @author shisong
	 * @date 2017年1月10日 下午6:42:10
	 * @modifyNote 
	 * @param courseId
	 * @return
	 */
	public RecruitTreenityDto getRecruitBycourseId(Long courseId);


	/**
	 * 
	 * @Description 获取课程列表 含缓存
	 * @author shisong
	 * @date 2017年2月28日 上午10:55:20
	 * @modifyNote 
	 * @param userId
	 * @return
	 */
	public List<RecruitTreenityDto> getCourseList(Long userId) throws RemoteException ;


	/**
	 * 
	 * @Description 删除课程列表缓存
	 * @author shisong
	 * @date 2017年2月28日 下午3:29:53
	 * @modifyNote 
	 * @param curUserId
	 */
	public void delRedisCourseList(Long curUserId);
}
